/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Server.DAO;

import DTO.KhachHang_DTO;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.util.ArrayList;
import javax.swing.table.DefaultTableModel;

/**
 *
 * @author Lenh Ho Xung
 */
public class KhachHang_DAO {

    private static String sqlString;
    private static MSSQLConnect cn;
    private static ResultSet rs;

    public static ArrayList<KhachHang_DTO> layDSKhachHang() throws Exception {
        ArrayList<KhachHang_DTO> ds = new ArrayList();
        sqlString = "SELECT * FROM KHACHHANG";
        try {
            //thực hiện câu truy vấn
            cn = new MSSQLConnect();
            //thực hiện câu truy vấn
            rs = cn.excuteQuery(sqlString);
            while (rs.next()) {
                KhachHang_DTO kh = new KhachHang_DTO();
                kh.setMaKhachHang(rs.getString("MaKhach"));
                kh.setTenKhachHang(rs.getString("TenKhach"));
                kh.setCmnd(rs.getString("CMND"));
                kh.setDienThoai(rs.getString("SoDienThoai"));
                kh.setEmail(rs.getString("Email"));
                ds.add(kh);
            }
        } catch (Exception e) {
            throw new Exception("Không thể lấy danh sách mã dịch vụ");
        } finally {
            cn.Close();
        }
        return ds;
    }

    public static String layTenKHTheoMa(String maKhach) throws Exception {
        String kq = null;
        sqlString = "SELECT TenKhach FROM KHACHHANG WHERE MaKhach = '" + maKhach + "'";
        try {
            cn = new MSSQLConnect();
            rs = cn.excuteQuery(sqlString);
            while (rs.next()) {
                kq = rs.getString("TenKhach");
            }
        } catch (Exception e) {
            throw new Exception("Không thể thêm vào cơ sơ dữ liệu");
        } finally {
            cn.Close();
        }
        return kq;
    }

    public static String laySoDTTheoMa(String maKhach) throws Exception {
        String kq = null;
        sqlString = "SELECT SoDienThoai FROM KHACHHANG WHERE MaKhach = '" + maKhach + "'";
        try {
            cn = new MSSQLConnect();
            rs = cn.excuteQuery(sqlString);
            while (rs.next()) {
                kq = rs.getString("SoDienThoai");
            }
        } catch (Exception e) {
            throw new Exception("Không thể thêm vào cơ sơ dữ liệu");
        } finally {
            cn.Close();
        }
        return kq;
    }

    public static DefaultTableModel addTable(ResultSet rs) throws Exception {
        DefaultTableModel table = new DefaultTableModel();
        ResultSetMetaData metaData = rs.getMetaData();
        int totalColumn = metaData.getColumnCount();
        Object[] dataRow = new Object[totalColumn];

        if (rs != null) {
            for (int i = 1; i <= totalColumn; i++) {
                table.addColumn(metaData.getColumnName(i));
            }
            while (rs.next()) {
                for (int i = 1; i <= totalColumn; i++) {
                    dataRow[i - 1] = rs.getObject(i);
                }
                table.addRow(dataRow);
            }

        }
        return table;

    }

    public static int Insert(KhachHang_DTO k) throws Exception {
        int n;
        sqlString = "INSERT INTO KHACHHANG(MaKhach, TenKhach, CMND, SoDienThoai, Email, TinhTrang) VALUES('"
                + k.getMaKhachHang() + "',N'"
                + k.getTenKhachHang() + "','"
                + k.getCmnd() + "','"
                + k.getDienThoai() + "','"
                + k.getEmail() + "',N'"
                + k.getTinhTrang() + "')";


        //Kết nối CSDL
        try {
            cn = new MSSQLConnect();
            n = cn.executeUpdate(sqlString);
        } catch (Exception e) {
            throw new Exception("Không thể thêm vào cơ sơ dữ liệu");
        } finally {
            cn.Close();
        }
        return n;
    }

    public static String laymaMax() throws Exception {
        String makhachmax = new String();
        sqlString = "SELECT TOP 1 MaKhach FROM KHACHHANG ORDER BY MaKhach DESC";
        try {
            cn = new MSSQLConnect();
            rs = cn.excuteQuery(sqlString);
            while (rs.next()) {
                makhachmax = rs.getString("MaKhach");
            }
        } catch (Exception e) {
            throw new Exception("Không thể lấy mã max");

        } finally {
            cn.Close();
        }
        return makhachmax;

    }

    public static DefaultTableModel layKhachDatPhong(String cmnd) throws Exception {
        DefaultTableModel table = new DefaultTableModel();
        sqlString = "SELECT k.MaKhach as [Mã khách], k.TenKhach as [Tên khách], k.CMND as [CMND],"
                + " k.Email as [Email], k.SoDienThoai as [Số điện thoại] "
                + "FROM KHACHHANG k INNER JOIN PhieuDatPhong p ON k.MAKHACH = p.MAKHACH"
                + " and CMND LIKE '" + cmnd + "%'";

        try {
            //thực hiện câu truy vấn
            cn = new MSSQLConnect();
            //thực hiện câu truy vấn
            rs = cn.excuteQuery(sqlString);
            table = addTable(rs);
        } catch (Exception e) {
            throw new Exception("Không thể lấy danh sách khach");
        } finally {
            cn.Close();
        }
        return table;
    }

    public static ArrayList<KhachHang_DTO> layKhachDangThue() throws Exception {
        ArrayList<KhachHang_DTO> ds = new ArrayList<>();

        sqlString = "SELECT MaKhach FROM KHACHHANG WHERE TinhTrang = N'Đang Thuê'";

        try {
            //thực hiện câu truy vấn
            cn = new MSSQLConnect();
            //thực hiện câu truy vấn
            rs = cn.excuteQuery(sqlString);
            while (rs.next()) {
                KhachHang_DTO kh = new KhachHang_DTO();
                kh.setMaKhachHang(rs.getString("MaKhach"));
//                kh.setTenKhachHang(rs.getString("TenKhach"));
//                kh.setCmnd(rs.getString("CMND"));
//                kh.setDienThoai(rs.getString("SoDienThoai"));
//                kh.setEmail(rs.getString("Email"));
                ds.add(kh);
            }
        } catch (Exception e) {
            throw new Exception("Không thể lấy danh sách khach");
        } finally {
            cn.Close();
        }
        return ds;
    }

    public static int capnhatTinhTrangKhachHang(String maKhach, String ttcapNhat) throws Exception {
        int n = 0;
        sqlString = "UPDATE KHACHHANG SET TinhTrang=N'" + ttcapNhat + "' WHERE MaKhach='" + maKhach + "'";
        try {
            cn = new MSSQLConnect();
            n = cn.executeUpdate(sqlString);
        } catch (Exception e) {

            throw new Exception("Không thể cập nhật mã phòng sau khi đặt");
        } finally {
            cn.Close();
        }
        return n;
    }

    public static DefaultTableModel layDSKhach() throws Exception {
        DefaultTableModel table = new DefaultTableModel();
        sqlString = "SELECT MaKhach as [Mã khách], TenKhach as [Tên khách], CMND as [CMND],"
                + " Email as [Email], SoDienThoai as [Số điện thoại] from KhachHang";

        try {
            //thực hiện câu truy vấn
            cn = new MSSQLConnect();
            //thực hiện câu truy vấn
            rs = cn.excuteQuery(sqlString);
            table = addTable(rs);
        } catch (Exception e) {
            throw new Exception("Không thể lấy danh sách khach");
        } finally {
            cn.Close();
        }
        return table;
    }

    public static DefaultTableModel timKhachTheoTen(String tenKhach) throws Exception {
        DefaultTableModel table = new DefaultTableModel();
        sqlString = "SELECT MaKhach as [Mã khách], TenKhach as [Tên khách], CMND as [CMND],"
                + " Email as [Email], SoDienThoai as [Số điện thoại] from KhachHang"
                + " where TenKhach LIKE '" + tenKhach + "%'";

        try {
            //thực hiện câu truy vấn
            cn = new MSSQLConnect();
            //thực hiện câu truy vấn
            rs = cn.excuteQuery(sqlString);
            table = addTable(rs);
        } catch (Exception e) {
            throw new Exception("Không thể lấy danh sách khach");
        } finally {
            cn.Close();
        }
        return table;
    }

    public static DefaultTableModel timKhachTheoCMND(String cmnd) throws Exception {
        DefaultTableModel table = new DefaultTableModel();
        sqlString = "SELECT MaKhach as [Mã khách], TenKhach as [Tên khách], CMND as [CMND],"
                + " Email as [Email], SoDienThoai as [Số điện thoại] from KhachHang"
                + " where CMND LIKE '" + cmnd + "%'";

        try {
            //thực hiện câu truy vấn
            cn = new MSSQLConnect();
            //thực hiện câu truy vấn
            rs = cn.excuteQuery(sqlString);
            table = addTable(rs);
        } catch (Exception e) {
            throw new Exception("Không thể lấy danh sách khach");
        } finally {
            cn.Close();
        }
        return table;
    }

    public static DefaultTableModel layDSKhachDatPhong() throws Exception {
        DefaultTableModel table = new DefaultTableModel();
        sqlString = "SELECT k.MaKhach as [Mã khách], k.TenKhach as [Tên khách], k.CMND as [CMND],"
                + " k.Email as [Email], k.SoDienThoai as [Số điện thoại] "
                + "FROM KHACHHANG k INNER JOIN PhieuDatPhong p ON k.MAKHACH = p.MAKHACH "
                + " WHERE k.TinhTrang = N'Đang đặt'";
        try {
            //thực hiện câu truy vấn
            cn = new MSSQLConnect();
            //thực hiện câu truy vấn
            rs = cn.excuteQuery(sqlString);
            table = addTable(rs);
        } catch (Exception e) {
            throw new Exception("Không thể lấy danh sách khach");
        } finally {
            cn.Close();
        }
        return table;
    }
}
